home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Franz PD / Franz PD Disk #142 (1991-10)(Rhein-Sieg-Soft).zip / Franz PD Disk #142 (1991-10)(Rhein-Sieg-Soft).adf / LinienP / Linien.asm < prev    next >
Assembly Source File  |  1991-09-30  |  10KB  |  235 lines

  1. ; *************************
  2. ; *      Linien V1.0      *
  3. ; * Geschrieben im Jahre  *
  4. ; * 1991 von N. Tausch    *
  5. ; *  Public Domain (FD)   *
  6. ; *************************
  7.  
  8. ExecBase:       equ 4
  9. OldOpenLibrary: equ -408
  10. CloseLibrary:   equ -414
  11. FindTask:       equ -294
  12. WaitPort:       equ -384
  13. Forbid:         equ -132
  14. Permit:         equ -138
  15. GetMsg:         equ -372
  16. ReplyMsg:       equ -378
  17.  
  18. OpenWindow:     equ -204
  19. CloseWindow:    equ -72
  20.  
  21. Move:           equ -240
  22. Draw:           equ -246
  23. RectFill:       equ -306
  24. SetAPen:        equ -342
  25.  
  26. Delay:          equ -198
  27.  
  28. pr_CLI:         equ 172
  29. ThisTask:       equ 276
  30. IDCMP:          equ 512
  31. Flags:          equ 70670
  32.  
  33.                 movea.l ExecBase,a6             ; Testen ob von CLI o.
  34.                 movea.l ThisTask(a6),a0         ; Workbench gestartet
  35.                 moveq #0,d0                     ; wurde!
  36.                 tst.l pr_CLI(a0)
  37.                 bne.s CLI                       ; Gestartet von CLI
  38.  
  39.                 lea 92(a0),a0                   ; Ansonsten WorkBenchMessage
  40.                 jsr WaitPort(a6)                ; holen und sichern
  41.                 jsr GetMsg(a6)
  42.                 move.l d0,WBenchMsg
  43.  
  44. CLI:            lea IntName,a1                  ; intuition.library öffnen
  45.                 jsr OldOpenLibrary(a6)
  46.                 move.l d0,IntBase
  47.                 beq.w Ende                      ; Falls Fehler dann Programmende
  48.  
  49.                 lea GfxName,a1                  ; graphics.library öffnen
  50.                 jsr OldOpenLibrary(a6)
  51.                 move.l d0,GfxBase
  52.                 beq.w Intschliessen             ; Falls Fehler dann intuition schliessen
  53.                                                                 ; und Programmende
  54.                 lea DosName,a1                  ; dos.library öffnen
  55.                 jsr OldOpenLibrary(a6)          ; (für Delay-Funktion!)
  56.                 move.l d0,DosBase               ; Falls Fehler dann graphics u. intuition
  57.                 beq.w Gfxschliessen             ; schliessen u. Programmende
  58.  
  59.                 movea.l IntBase,a6              ; Öffne das Fenster
  60.                 lea NewWindow,a0
  61.                 jsr OpenWindow(a6)
  62.                 move.l d0,WindowHandle          ; Falls Fehler dann intuition,graphics
  63.                 beq.w Dosschliessen             ; u. dos.library schliessen u. Ende
  64.                 movea.l WindowHandle,a0
  65.                 move.l 50(a0),RastPort          ; RastPort holen
  66.  
  67. Schleife:
  68.                 jsr CLW                         ; Lösche Fensterinhalt
  69.                 lea Tabelle,a0                  ; Tabellenanfang nach a0
  70. Schleife2:
  71.                 cmp.l #0,(a0)                   ; Schon Ende erreicht?
  72.                 beq.s Schleife                  ; Ja? Dann von vorne
  73.                 cmp.l #50000,(a0)               ; Soll der Fensterinhalt gelöscht
  74.                 beq.w CLS                       ; werden? Ja? Dann tue es!
  75.                 cmp.l #60000,(a0)               ; Soll ein wenig gewartet werden?
  76.                 beq.s Warte                     ; Ja? Dann tue es!
  77.                 movea.l GfxBase,a6              ; Startpunkt einer Linie aus der
  78.                 movea.l RastPort,a1             ; Tabelle holen und setzen
  79.                 move.l (a0)+,d0
  80.                 move.l (a0)+,d1
  81.                 jsr Move(a6)
  82.  
  83.                 movea.l RastPort,a1             ; Endpunkt einer Linie aus der
  84.                 move.l (a0)+,d0                 ; Tabelle holen und Linie zeichnen
  85.                 move.l (a0)+,d1
  86.                 move.l a0,a5
  87.                 jsr Draw(a6)
  88.  
  89.                 movea.l WindowHandle,a0         ; Wurde das Schließsymbol betätigt?
  90.                 movea.l 86(a0),a0
  91.                 movea.l ExecBase,a6
  92.                 jsr GetMsg(a6)
  93.                 tst.l d0                        ; Wenn ja dann Fensterschliessen,
  94.                 bne.w Windowzu                  ; Libraries schliessen und Ende
  95.                 movea.l DosBase,a6              ; Ansonsten warte ein wenig
  96.                 move.l #2,d1
  97.                 jsr Delay(a6)
  98.                 move.l a5,a0
  99.                 bra Schleife2                   ; und zur nächsten Linie
  100.  
  101. Warte:          movea.l a0,a5                   ; Unterprogramm wartet eine
  102.                 movea.l DosBase,a6              ; Sekunde lang
  103.                 move.l #50,d1
  104.                 jsr Delay(a6)
  105.                 movea.l a5,a0
  106.                 move.l (a0)+,d0
  107.                 bra Schleife2
  108.  
  109. CLS:            jsr CLW                         ; Unterprogramm löscht den
  110.                 move.l (a0)+,d0                 ; Fensterinhalt
  111.                 bra Schleife2
  112.  
  113. CLW:            movea.l a0,a5                   ; Fensterlöschroutine
  114.                 movea.l GfxBase,a6              ; Setzt Vordergrundfarbe
  115.                 move.l #0,d0                    ; gleich der Hintergrundfarbe
  116.                 movea.l RastPort,a1
  117.                 jsr SetAPen(a6)
  118.                 movea.l RastPort,a1
  119.                 move.l #2,d0
  120.                 move.l #10,d1
  121.                 move.l #197,d2
  122.                 move.l #108,d3
  123.                 jsr RectFill(a6)                ; Und füllt den Fensterinhalt mit
  124.                 move.l #1,d0                    ; einem Rechteck
  125.                 movea.l RastPort,a1
  126.                 jsr SetAPen(a6)                 ; Farbe wieder auf normal setzen
  127.                 movea.l a5,a0
  128.                 rts
  129.  
  130. Windowzu:
  131.                 movea.l IntBase,a6              ; Fenster schliessen
  132.                 movea.l WindowHandle,a0
  133.                 jsr CloseWindow(a6)
  134.  
  135. Dosschliessen:                                  ; dos.library schliessen
  136.                 movea.l ExecBase,a6
  137.                 movea.l DosBase,a1
  138.                 jsr CloseLibrary(a6)
  139.  
  140. Gfxschliessen:                                  ; graphics.library schliessen
  141.                 movea.l ExecBase,a6
  142.                 movea.l GfxBase,a1
  143.                 jsr CloseLibrary(a6)
  144.  
  145. Intschliessen:                                  ; intuition.library schliessen
  146.                 movea.l ExecBase,a6
  147.                 movea.l IntBase,a1
  148.                 jsr CloseLibrary(a6)
  149.  
  150. Ende:           movea.l ExecBase,a6             ; Wenn von der WorkBench
  151.                 move.l WBenchMsg,d0             ; aus gestartet wurde
  152.                 beq.s Ende2                     ; dann die WorkBenchMessage wieder
  153.                 jsr Forbid(a6)                  ; zurückgeben
  154.                 movea.l d0,a1
  155.                 jsr ReplyMsg(a6)
  156.                 jsr Permit(a6)
  157. Ende2:          moveq #0,d0                     ; Ansonsten ohne Nachrichten-
  158.                 rts                             ; austausch Programm beenden
  159.  
  160. ; ************** Daten ***************
  161.  
  162. WBenchMsg:      dc.l 0
  163. WindowHandle:   dc.l 0
  164. RastPort:       dc.l 0
  165. DosName:        dc.b 'dos.library',0
  166. DosBase:        dc.l 0
  167. IntName:        dc.b 'intuition.library',0
  168. IntBase:        dc.l 0
  169. GfxName:        dc.b 'graphics.library',0
  170. GfxBase:        dc.l 0
  171. NewWindow:
  172.                 dc.w 209,57,204,113             ; x,y,Breite,Höhe
  173.                 dc.b 3,1                        ; Vordergrund-,Hintergrundfarbe
  174.                 dc.l IDCMP                      ; IDCMP-Flags
  175.                 dc.l Flags                      ; System-Flags
  176.                 dc.l 0,0                        ; Zeiger auf Gadget und MenüHackenImage
  177.                 dc.l TitelText                  ; Zeiger auf Titeltext
  178.                 dc.l 0,0                        ; Zeiger auf Screen und eigene Bitmap
  179.                 dc.w 204,113,204,113            ; minx,miny,maxx,maxy
  180.                 dc.w 1                                          ; 1 für Workbenchscreen
  181. TitelText:  dc.b 'Linien',0     ; Fenstertitel
  182.                 even
  183. Tabelle:                        ; Tabelle
  184.                 dc.l 50000,100,10,100,90,20,50,180,50
  185.                 dc.l 100,10,90,50,100,15,80,50  ; 60000 bedeutet warten
  186.                 dc.l 100,25,60,50,100,30,50,50  ; 50000 bedeutet Fenster löschen
  187.                 dc.l 100,35,40,50,100,40,30,50,100,45
  188.                 dc.l 20,50,100,10,110,50,100,15,120,50
  189.                 dc.l 100,20,130,50,100,25,140,50,100,30
  190.                 dc.l 150,50,100,35,160,50,100,40,170,50
  191.                 dc.l 100,45,180,50,100,90,90,50,100,85
  192.                 dc.l 80,50,100,80,70,50,100,75,60,50
  193.                 dc.l 100,70,50,50,100,65,40,50,100,60
  194.                 dc.l 30,50,100,55,20,50,100,90,110,50
  195.                 dc.l 100,85,120,50,100,80,130,50,100,75
  196.                 dc.l 140,50,100,70,150,50,100,65,160,50
  197.                 dc.l 100,60,170,50,100,55,180,50,60000
  198.                 dc.l 50000,20,10,180,10,180,10,180,90
  199.                 dc.l 20,10,20,90,180,90,20,90,20,15,100,10
  200.                 dc.l 20,20,90,10,20,25,80,10,20,30
  201.                 dc.l 70,10,20,35,60,10,20,40,50,10,20
  202.                 dc.l 45,40,10,30,10,20,50,20,50,30,90
  203.                 dc.l 20,55,40,90,20,60,50,90,20,65,60
  204.                 dc.l 90,20,70,70,90,20,75,80,90,20,80
  205.                 dc.l 90,90,20,85,100,90,100,90,180,85
  206.                 dc.l 110,90,180,80,120,90,180,75,130
  207.                 dc.l 90,180,70,140,90,180,65,150,90
  208.                 dc.l 180,60,160,90,180,55,170,90,180
  209.                 dc.l 50,180,50,170,10,180,45,160,10,180
  210.                 dc.l 40,150,10,180,35,140,10,180,30,130
  211.                 dc.l 10,180,25,120,10,180,20,110,10,180
  212.                 dc.l 15,100,10,60000
  213.                 dc.l 50000,100,10,100,60,60,10,110,60
  214.                 dc.l 20,10,120,60,20,30,120,55,20,50,120
  215.                 dc.l 50,20,70,120,45,20,90,120,40,60,90
  216.                 dc.l 110,40,100,90,100,50,140,90,100,50
  217.                 dc.l 180,90,100,50,180,70,100,50,180,50
  218.                 dc.l 100,50,180,30,100,50,180,10,100,50
  219.                 dc.l 140,10,100,50,60000
  220.                 dc.l 120,40,80,40,80,40,80,60,80,60,120
  221.                 dc.l 60,120,60,120,40,60,30,60,70,60,70
  222.                 dc.l 140,70,140,70,140,30,140,30,60,30,40
  223.                 dc.l 80,160,80,160,80,160,20,160,20,40,20
  224.                 dc.l 40,20,40,80,180,90,180,10,180,10,20
  225.                 dc.l 10,20,10,20,90,20,90,180,90,60000
  226.                 dc.l 20,50,100,10,20,30,60,10,20,50,100,90
  227.                 dc.l 20,70,60,90,100,90,180,50,140,90,180
  228.                 dc.l 70,180,50,100,10,180,30,140,10,60000
  229.                 dc.l 100,20,40,50,40,50,100,80,100,80,160
  230.                 dc.l 50,160,50,100,20,100,30,60,50,60,50
  231.                 dc.l 100,70,100,70,140,50,140,50,100,30,60000
  232.                 dc.l 0            ; 0 = Ende der Tabelle
  233.       end
  234.  
  235.